package jp.dodododo.dao.log;

import java.util.LinkedList;

public class SqlLogRegistry {

	private static final int DEFAULT_LIMIT_SIZE = 128;

	private int limitSize;

	private ThreadLocal<LinkedList<SqlLog>> threadList = new ThreadLocal<LinkedList<SqlLog>>() {
		@Override
		protected LinkedList<SqlLog> initialValue() {
			return new LinkedList<SqlLog>();
		}
	};

	/**
	 * デフォルトの上限サイズを使用してインスタンスを構築します。
	 * 
	 */
	public SqlLogRegistry() {
		this(DEFAULT_LIMIT_SIZE);
	}

	/**
	 * 上限サイズを指定してインスタンスを構築します。
	 * 
	 * @param limitSize
	 *            上限サイズ
	 */
	public SqlLogRegistry(int limitSize) {
		this.limitSize = limitSize;
	}

	public int getLimitSize() {
		return limitSize;
	}

	public int getSize() {
		return getSqlLogList().size();
	}

	public boolean isEmpty() {
		return getSize() == 0;
	}

	public SqlLog get(int index) {
		return getSqlLogList().get(index);
	}

	public SqlLog getLast() {
		return isEmpty() ? null : getSqlLogList().getLast();
	}

	public void add(SqlLog sqlLog) {
		LinkedList<SqlLog> list = getSqlLogList();
		list.add(sqlLog);
		if (limitSize < list.size()) {
			list.removeFirst();
		}
	}

	public void clear() {
		getSqlLogList().clear();
	}

	private LinkedList<SqlLog> getSqlLogList() {
		return threadList.get();
	}
}
